#pragma once

#include <iostream>
#include <string>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>

namespace vod
{
    void daemon(const std::string &newPwd)
    {
        signal(SIGPIPE, SIG_IGN); // 1.设置信号屏蔽
        if (newPwd != "")
            chdir(newPwd.c_str()); // 2.设置新的pwd
        if (fork() > 0)
            exit(0);
        setsid();                           // 3.创建新的会话
        int fd = open("/dev/null", O_RDWR); // 4.输入输出错误流重定向到/dev/null
        if (open > 0)
        {
            dup2(fd, STDIN_FILENO);
            dup2(fd, STDOUT_FILENO);
            dup2(fd, STDERR_FILENO);
            if (fd > STDERR_FILENO)
            {
                close(fd);
            }
        }
    }
}